<?php

namespace app\common\model;

use think\Model;

class QuestionCate extends Model
{
    // 表名
    protected $name = 'question_cate';
    
    // 自动写入时间戳字段
    protected $autoWriteTimestamp = 'int';
    
    // 定义时间戳字段名
    protected $createTime = 'createtime';
    protected $updateTime = false;
    
    // 追加属性
    protected $append = [
        'status_text',
        'is_details_text'
    ];
    
    // 状态映射
    public function getStatusTextAttr($value, $data)
    {
        $status = [
            'normal' => '展示',
            'hidden' => '隐藏'
        ];
        return isset($status[$data['status']]) ? $status[$data['status']] : '';
    }
    
    // 是否详情页映射
    public function getIsDetailsTextAttr($value, $data)
    {
        $isDetails = [
            '0' => '否',
            '1' => '是'
        ];
        return isset($isDetails[$data['is_details']]) ? $isDetails[$data['is_details']] : '';
    }
    
    /**
     * 获取一级分类（pid为0或null的分类）
     * @return array
     */
    public static function getFirstLevelCates()
    {
        return self::where('pid', 0)
            ->where('status', 'normal')
            ->order('weigh desc, id asc')
            ->select();
    }
    
    /**
     * 根据父级ID获取子分类
     * @param int $pid 父级ID
     * @return array
     */
    public static function getChildCates($pid)
    {
        return self::where('pid', $pid)
            ->where('status', 'normal')
            ->order('weigh desc, id asc')
            ->select();
    }
    
    /**
     * 获取分类树形结构
     * @param int $pid 父级ID，默认为0（一级分类）
     * @return array
     */
    public static function getCateTree($pid = 0)
    {
        $cates = self::where('pid', $pid)
            ->where('status', 'normal')
            ->order('weigh desc, id asc')
            ->select();
        $tree = [];
        foreach ($cates as $cate) {
            $item = $cate->toArray();
            // 递归获取子分类
            $children = self::getCateTree($cate['id']);
            if (!empty($children)) {
                $item['children'] = $children;
            }
            $tree[] = $item;
        }
        
        return $tree;
    }
    
    /**
     * 获取所有分类的完整树形结构
     * @return array
     */
    public static function getAllCateTree()
    {
        return self::getCateTree(0);
    }
    
    /**
     * 根据分类ID获取分类信息
     * @param int $id 分类ID
     * @return array|null
     */
    public static function getCateById($id)
    {
        return self::where('id', $id)
            ->where('status', 'normal')
            ->find();
    }
    
    /**
     * 获取分类路径（从根分类到当前分类）
     * @param int $id 分类ID
     * @return array
     */
    public static function getCatePath($id)
    {
        $path = [];
        $current = self::getCateById($id);
        
        if (!$current) {
            return $path;
        }
        
        // 从当前分类开始，向上查找父级分类
        $path[] = $current;
        $pid = $current['pid'];
        
        while ($pid > 0) {
            $parent = self::getCateById($pid);
            if ($parent) {
                array_unshift($path, $parent);
                $pid = $parent['pid'];
            } else {
                break;
            }
        }
        
        return $path;
    }
} 